eclipse是Java所需要的。即使已定义,也要运行的类文件
我今天刚开始使用Java,当我运行代码时,我遇到了一个NoClassDefFoundError:
class Example {
public static final String greeting = "Hi there";
public static void main(String[] args) {
System.out.format("%s", Example.greeting);
}
}
以上是我的example.java
代码的内容。这段代码在Eclipse执行时编译得很好,但当我试图单独运行example.java
时,它失败了。当我运行这个程序时,Eclipse还创建了一些.class
文件,但这并不能解释为什么如果我在另一个目录中单独运行.java
会失败,因为class Example
的所有信息都可以在.java
文件中找到
Java是否需要.class
文件来编译和运行,尽管程序中定义了类本身,为什么?我还通过终端构建了.java
文件,效果很好
# 1 楼答案
Java程序的编译和执行分为两步:
在编译阶段,Java编译器编译源代码并生成
bytecode
。这个中间bytecode
以.class file
的形式保存在第二阶段,Java虚拟机(JVM)也称为Java解释器,将
.class
作为输入,并通过执行bytecode
生成输出所以是的
.class
文件对于代码的执行是必不可少的.java
文件是您编写的文本,但不是机器可以解释的文本下面是发生的事情的流程图:
要更深入地了解它:
构建Java项目时,它会将源代码(包含在
*.java
源文件中)转换为Javabytecode
(通常包含在*.class
文件中)。这使您的高级代码离机器代码更近了一步,但还没有完全实现这个bytecode
是一个紧凑指令的集合;机器更容易理解,但可读性较差当您在计算机、手机或任何其他支持Java的平台上运行Java应用程序时,基本上就是将这个Java
bytecode
传递给Java虚拟机。Java虚拟机中的解释器通常在运行时开始编译整个bytecode
,遵循所谓的即时编译原则。这导致了在打开Java应用程序时的典型延迟,尽管通常是轻微的延迟,但与解释编译相比,通常会提高程序性能